{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# pandas 进阶修炼 ｜早起Python\n",
    "<br>\n",
    "\n",
    "**本习题由公众号【早起Python & 可视化图鉴】 原创，转载及其他形式合作请与我们联系（微信号`sshs321`)，未经授权严禁搬运及二次创作，侵权必究！**\n",
    "\n",
    "\n",
    "\n",
    "本习题基于 `pandas` 版本 `1.1.3`，所有内容应当在 `Jupyter Notebook` 中执行以获得最佳效果。\n",
    "\n",
    "不同版本之间写法可能会有少许不同，如若碰到此情况，你应该学会如何自行检索解决。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6 - 数据分组与聚合\n",
    "\n",
    "\n",
    "\n",
    "<br>\n",
    "\n",
    "**<font color = '#5172F0'><font size=3.5>必读👇👇👇**</font>\n",
    "\n",
    "在前面 5 节的习题中，大多是关于利用 pandas 进行**数据处理**的操作。\n",
    "\n",
    "现在，终于来到**数据分析**部分。\n",
    "\n",
    "而**数据的分组与聚合**，也是在数据分析中十分高频的过程。\n",
    "\n",
    "本节习题我整理了一些利用 pandas 进行数据的分组与聚合的常用操作。\n",
    "\n",
    "注意，为了更清晰的表达我的问题，本节习题中大部分习题会**保留运行结果**，也是我题目预期产生的结果，如果不理解题目所问，可以进行参考。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 初始化\n",
    "\n",
    "<br>\n",
    "\n",
    "该 `Notebook` 版本为**纯习题版**\n",
    "\n",
    "如果需要答案或者提示，可以微信搜索公众号「早起Python」获取！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 加载数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 311,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv(\"某招聘网站数据.csv\",parse_dates=['createTime'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分组"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1 - 分组统计｜均值\n",
    "\n",
    "计算各区(`district`)的薪资(`salary`)均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>district</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>26250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>30000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>33583.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>28500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>25250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>31428.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>36250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>30893.939394</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                salary\n",
       "district              \n",
       "上城区       26250.000000\n",
       "下沙        30000.000000\n",
       "余杭区       33583.333333\n",
       "拱墅区       28500.000000\n",
       "江干区       25250.000000\n",
       "滨江区       31428.571429\n",
       "萧山区       36250.000000\n",
       "西湖区       30893.939394"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2 - 分组统计｜取消索引\n",
    "\n",
    "重新按照上一题要求进行分组，但不使用 `district` 做为索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>district</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>上城区</td>\n",
       "      <td>26250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>下沙</td>\n",
       "      <td>30000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>余杭区</td>\n",
       "      <td>33583.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>拱墅区</td>\n",
       "      <td>28500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>江干区</td>\n",
       "      <td>25250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>滨江区</td>\n",
       "      <td>31428.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>萧山区</td>\n",
       "      <td>36250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>西湖区</td>\n",
       "      <td>30893.939394</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  district        salary\n",
       "0      上城区  26250.000000\n",
       "1       下沙  30000.000000\n",
       "2      余杭区  33583.333333\n",
       "3      拱墅区  28500.000000\n",
       "4      江干区  25250.000000\n",
       "5      滨江区  31428.571429\n",
       "6      萧山区  36250.000000\n",
       "7      西湖区  30893.939394"
      ]
     },
     "execution_count": 242,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3 - 分组统计｜排序\n",
    "\n",
    "计算并提取平均薪资最高的区"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>district</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>36250.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           salary\n",
       "district         \n",
       "萧山区       36250.0"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4 - 分组统计｜频率\n",
    "\n",
    "计算不同行政区(`district`)，不同规模公司(`companySize`)出现的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>companySize</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>district</th>\n",
       "      <th>companySize</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <th>50-150人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <th>150-500人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"4\" valign=\"top\">余杭区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150-500人</th>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">拱墅区</th>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000人以上</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">江干区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">滨江区</th>\n",
       "      <th>150-500人</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000人以上</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">萧山区</th>\n",
       "      <th>500-2000人</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">西湖区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150-500人</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15-50人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      companySize\n",
       "district companySize             \n",
       "上城区      50-150人                2\n",
       "下沙       150-500人               1\n",
       "余杭区      2000人以上               14\n",
       "         150-500人              13\n",
       "         50-150人                7\n",
       "         500-2000人              2\n",
       "拱墅区      500-2000人              2\n",
       "         2000人以上                1\n",
       "         50-150人                1\n",
       "江干区      2000人以上                2\n",
       "         500-2000人              2\n",
       "滨江区      150-500人              14\n",
       "         2000人以上                6\n",
       "         500-2000人              1\n",
       "萧山区      500-2000人              3\n",
       "         50-150人                1\n",
       "西湖区      2000人以上               11\n",
       "         500-2000人              9\n",
       "         150-500人               7\n",
       "         50-150人                5\n",
       "         15-50人                 1"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5 - 分组统计｜修改索引名\n",
    "\n",
    "将上一题的索引名修改为\n",
    "- district -> 行政区\n",
    "- companySize -> 公司规模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 384,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>companySize</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>行政区</th>\n",
       "      <th>公司规模</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <th>50-150人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <th>150-500人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"4\" valign=\"top\">余杭区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150-500人</th>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">拱墅区</th>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000人以上</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">江干区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">滨江区</th>\n",
       "      <th>150-500人</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000人以上</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">萧山区</th>\n",
       "      <th>500-2000人</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">西湖区</th>\n",
       "      <th>2000人以上</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500-2000人</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150-500人</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50-150人</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15-50人</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               companySize\n",
       "行政区 公司规模                  \n",
       "上城区 50-150人              2\n",
       "下沙  150-500人             1\n",
       "余杭区 2000人以上             14\n",
       "    150-500人            13\n",
       "    50-150人              7\n",
       "    500-2000人            2\n",
       "拱墅区 500-2000人            2\n",
       "    2000人以上              1\n",
       "    50-150人              1\n",
       "江干区 2000人以上              2\n",
       "    500-2000人            2\n",
       "滨江区 150-500人            14\n",
       "    2000人以上              6\n",
       "    500-2000人            1\n",
       "萧山区 500-2000人            3\n",
       "    50-150人              1\n",
       "西湖区 2000人以上             11\n",
       "    500-2000人            9\n",
       "    150-500人             7\n",
       "    50-150人              5\n",
       "    15-50人               1"
      ]
     },
     "execution_count": 384,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6 - 分组统计｜计数\n",
    "\n",
    "计算上一题，每个区出现的公司数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "district\n",
       "上城区     2\n",
       "下沙      1\n",
       "余杭区    36\n",
       "拱墅区     4\n",
       "江干区     4\n",
       "滨江区    21\n",
       "萧山区     4\n",
       "西湖区    33\n",
       "Name: companySize, dtype: int64"
      ]
     },
     "execution_count": 231,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7 - 分组查看｜全部\n",
    "\n",
    "将数据按照 `district`、`salary` 进行分组，并查看各分组内容"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{('上城区', 22500): [81], ('上城区', 30000): [97], ('下沙', 30000): [31], ('余杭区', 7500): [84], ('余杭区', 20000): [52, 103], ('余杭区', 22500): [23, 51], ('余杭区', 25000): [62], ('余杭区', 27500): [24, 49], ('余杭区', 29000): [93], ('余杭区', 30000): [4, 10, 13, 18, 59, 61, 65, 68, 74, 76, 86, 92, 94], ('余杭区', 35000): [101], ('余杭区', 37500): [0, 32, 38, 39, 41], ('余杭区', 40000): [60, 87], ('余杭区', 45000): [25], ('余杭区', 50000): [5, 64, 90], ('余杭区', 60000): [8, 82], ('拱墅区', 24000): [72], ('拱墅区', 30000): [54, 89, 96], ('江干区', 3500): [2], ('江干区', 22500): [45], ('江干区', 30000): [73], ('江干区', 45000): [3], ('滨江区', 7500): [83], ('滨江区', 15000): [1], ('滨江区', 20000): [21, 40], ('滨江区', 22500): [37], ('滨江区', 30000): [22, 53, 55, 58, 67, 80, 102], ('滨江区', 32500): [26], ('滨江区', 37500): [17, 28, 57, 77], ('滨江区', 42500): [91], ('滨江区', 45000): [43, 47], ('滨江区', 50000): [44], ('萧山区', 25000): [100], ('萧山区', 30000): [6], ('萧山区', 45000): [66, 69], ('西湖区', 6500): [71], ('西湖区', 20000): [12], ('西湖区', 21500): [104], ('西湖区', 22500): [48, 70], ('西湖区', 24000): [42], ('西湖区', 25000): [56], ('西湖区', 26500): [78], ('西湖区', 27000): [75], ('西湖区', 27500): [15, 20, 50, 63], ('西湖区', 30000): [11, 27, 33, 34, 85, 88, 98], ('西湖区', 35000): [7], ('西湖区', 36500): [99], ('西湖区', 37500): [14, 16, 19, 30, 36, 79, 95], ('西湖区', 40000): [9, 35], ('西湖区', 45000): [29, 46]}"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8 - 分组查看｜指定\n",
    "\n",
    "将数据按照 `district`、`salary` 进行分组，并查看西湖区薪资为 30000 的工作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>positionName</th>\n",
       "      <th>companySize</th>\n",
       "      <th>industryField</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>firstType</th>\n",
       "      <th>secondType</th>\n",
       "      <th>thirdType</th>\n",
       "      <th>createTime</th>\n",
       "      <th>district</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>jobNature</th>\n",
       "      <th>education</th>\n",
       "      <th>positionAdvantage</th>\n",
       "      <th>imState</th>\n",
       "      <th>score</th>\n",
       "      <th>matchScore</th>\n",
       "      <th>famousCompany</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>大数据分析工程师(J11108)</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>移动互联网,企业服务</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>['技能培训', '年底双薪', '带薪年假', '岗位晋升']</td>\n",
       "      <td>开发|测试|运维类</td>\n",
       "      <td>数据开发</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>2020-03-16 09:25:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>应届毕业生</td>\n",
       "      <td>全职</td>\n",
       "      <td>本科</td>\n",
       "      <td>六险一金 带薪年假 年度体检 周末双休</td>\n",
       "      <td>today</td>\n",
       "      <td>17</td>\n",
       "      <td>4.245066</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>数据分析经理</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>硬件</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>['年终分红', '带薪年假', '年度旅游', '岗位晋升']</td>\n",
       "      <td>产品|需求|项目类</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>2020-03-16 11:24:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>全职</td>\n",
       "      <td>本科</td>\n",
       "      <td>股票期权,千万级用户,试用期全薪</td>\n",
       "      <td>today</td>\n",
       "      <td>6</td>\n",
       "      <td>1.164083</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>数据分析师（社招）</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>['绩效奖金', '股票期权', '年底双薪', '专项奖金']</td>\n",
       "      <td>产品|需求|项目类</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>2020-03-16 11:18:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>应届毕业生</td>\n",
       "      <td>全职</td>\n",
       "      <td>不限</td>\n",
       "      <td>16-18薪 大数据A股上市公司</td>\n",
       "      <td>today</td>\n",
       "      <td>15</td>\n",
       "      <td>1.020377</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>商业数据分析师</td>\n",
       "      <td>50-150人</td>\n",
       "      <td>移动互联网,企业服务</td>\n",
       "      <td>B轮</td>\n",
       "      <td>['定期体检', '帅哥多', '领导好', '美女多']</td>\n",
       "      <td>市场|商务类</td>\n",
       "      <td>市场|营销</td>\n",
       "      <td>商业数据分析</td>\n",
       "      <td>2020-03-16 11:13:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>全职</td>\n",
       "      <td>硕士</td>\n",
       "      <td>发挥空间大,职业发展好</td>\n",
       "      <td>today</td>\n",
       "      <td>5</td>\n",
       "      <td>1.095633</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>['包午餐晚餐', '奖金多多多', '零食下午茶', '全员出国游']</td>\n",
       "      <td>产品|需求|项目类</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>2020-03-14 21:28:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>全职</td>\n",
       "      <td>本科</td>\n",
       "      <td>福利好，年轻有活力，行业前景好</td>\n",
       "      <td>today</td>\n",
       "      <td>2</td>\n",
       "      <td>0.389503</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>资深数据分析师</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>A轮</td>\n",
       "      <td>['岗位晋升', '年度旅游', '年底双薪', '午餐补助']</td>\n",
       "      <td>产品|需求|项目类</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>数据分析</td>\n",
       "      <td>2020-03-15 19:43:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>全职</td>\n",
       "      <td>大专</td>\n",
       "      <td>六险一金,餐饮补贴,双休,出国旅游</td>\n",
       "      <td>today</td>\n",
       "      <td>1</td>\n",
       "      <td>0.502371</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>数据分析建模工程师</td>\n",
       "      <td>50-150人</td>\n",
       "      <td>数据服务,信息安全</td>\n",
       "      <td>A轮</td>\n",
       "      <td>['午餐补助', '带薪年假', '16到18薪', '法定节假日']</td>\n",
       "      <td>开发|测试|运维类</td>\n",
       "      <td>人工智能</td>\n",
       "      <td>机器学习</td>\n",
       "      <td>2020-03-14 19:00:00</td>\n",
       "      <td>西湖区</td>\n",
       "      <td>30000</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>全职</td>\n",
       "      <td>本科</td>\n",
       "      <td>海量数据 全链路建模实践 16-18薪</td>\n",
       "      <td>threeDays</td>\n",
       "      <td>0</td>\n",
       "      <td>0.356308</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        positionName companySize industryField financeStage  \\\n",
       "11  大数据分析工程师(J11108)     2000人以上    移动互联网,企业服务         上市公司   \n",
       "27            数据分析经理     2000人以上            硬件        不需要融资   \n",
       "33         数据分析师（社招）   500-2000人         移动互联网         上市公司   \n",
       "34           商业数据分析师     50-150人    移动互联网,企业服务           B轮   \n",
       "85           高级数据分析师   500-2000人         移动互联网         上市公司   \n",
       "88           资深数据分析师   500-2000人         移动互联网           A轮   \n",
       "98         数据分析建模工程师     50-150人     数据服务,信息安全           A轮   \n",
       "\n",
       "                        companyLabelList  firstType secondType thirdType  \\\n",
       "11      ['技能培训', '年底双薪', '带薪年假', '岗位晋升']  开发|测试|运维类       数据开发      数据分析   \n",
       "27      ['年终分红', '带薪年假', '年度旅游', '岗位晋升']  产品|需求|项目类       数据分析      数据分析   \n",
       "33      ['绩效奖金', '股票期权', '年底双薪', '专项奖金']  产品|需求|项目类       数据分析      数据分析   \n",
       "34         ['定期体检', '帅哥多', '领导好', '美女多']     市场|商务类      市场|营销    商业数据分析   \n",
       "85  ['包午餐晚餐', '奖金多多多', '零食下午茶', '全员出国游']  产品|需求|项目类       数据分析      数据分析   \n",
       "88      ['岗位晋升', '年度旅游', '年底双薪', '午餐补助']  产品|需求|项目类       数据分析      数据分析   \n",
       "98   ['午餐补助', '带薪年假', '16到18薪', '法定节假日']  开发|测试|运维类       人工智能      机器学习   \n",
       "\n",
       "            createTime district  salary workYear jobNature education  \\\n",
       "11 2020-03-16 09:25:00      西湖区   30000    应届毕业生        全职        本科   \n",
       "27 2020-03-16 11:24:00      西湖区   30000    5-10年        全职        本科   \n",
       "33 2020-03-16 11:18:00      西湖区   30000    应届毕业生        全职        不限   \n",
       "34 2020-03-16 11:13:00      西湖区   30000     1-3年        全职        硕士   \n",
       "85 2020-03-14 21:28:00      西湖区   30000     3-5年        全职        本科   \n",
       "88 2020-03-15 19:43:00      西湖区   30000     3-5年        全职        大专   \n",
       "98 2020-03-14 19:00:00      西湖区   30000     1-3年        全职        本科   \n",
       "\n",
       "      positionAdvantage    imState  score  matchScore  famousCompany  \n",
       "11  六险一金 带薪年假 年度体检 周末双休      today     17    4.245066          False  \n",
       "27     股票期权,千万级用户,试用期全薪      today      6    1.164083           True  \n",
       "33     16-18薪 大数据A股上市公司      today     15    1.020377           True  \n",
       "34          发挥空间大,职业发展好      today      5    1.095633          False  \n",
       "85      福利好，年轻有活力，行业前景好      today      2    0.389503          False  \n",
       "88    六险一金,餐饮补贴,双休,出国旅游      today      1    0.502371          False  \n",
       "98  海量数据 全链路建模实践 16-18薪  threeDays      0    0.356308          False  "
      ]
     },
     "execution_count": 237,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 9 - 分组规则｜通过匿名函数1\n",
    "\n",
    "根据 createTime 列，计算每天不同 行政区 新增的岗位数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>district</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>发布日</th>\n",
       "      <th>行政区</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <th>余杭区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <th>拱墅区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">11</th>\n",
       "      <th>萧山区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <th>上城区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <th>西湖区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"4\" valign=\"top\">14</th>\n",
       "      <th>西湖区</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">15</th>\n",
       "      <th>余杭区</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">16</th>\n",
       "      <th>余杭区</th>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         district\n",
       "发布日 行政区          \n",
       "9   余杭区         1\n",
       "10  拱墅区         1\n",
       "11  萧山区         1\n",
       "    西湖区         1\n",
       "12  上城区         1\n",
       "13  西湖区         1\n",
       "14  西湖区         3\n",
       "    余杭区         1\n",
       "    拱墅区         1\n",
       "    滨江区         1\n",
       "15  余杭区         6\n",
       "    滨江区         2\n",
       "    西湖区         1\n",
       "16  余杭区        28\n",
       "    西湖区        27\n",
       "    滨江区        18\n",
       "    江干区         4\n",
       "    萧山区         3\n",
       "    拱墅区         2\n",
       "    上城区         1\n",
       "    下沙          1"
      ]
     },
     "execution_count": 258,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "微信搜索公众号「早起Python」，关注后可以获得更多资源！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 10 - 分组规则｜通过匿名函数2\n",
    "\n",
    "计算各行政区的企业领域（industryField）包含电商的总数\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "district\n",
       "余杭区    9\n",
       "滨江区    9\n",
       "江干区    2\n",
       "萧山区    3\n",
       "西湖区    4\n",
       "下沙     1\n",
       "拱墅区    0\n",
       "上城区    0\n",
       "Name: industryField, dtype: int64"
      ]
     },
     "execution_count": 257,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![公众号：早起Python](http://liuzaoqi.oss-cn-beijing.aliyuncs.com/2021/09/18/16319660121648.jpg?域名/sample.jpg?x-oss-process=style/stylename)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 11 - 分组规则｜通过内置函数\n",
    "\n",
    "通过 positionName 的长度进行分组，并计算不同长度岗位名称的薪资均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4     30125.000000\n",
       "5     34083.333333\n",
       "6     32954.545455\n",
       "7     29816.666667\n",
       "8     31875.000000\n",
       "9     29375.000000\n",
       "10    30000.000000\n",
       "11    34166.666667\n",
       "12    29583.333333\n",
       "13    38833.333333\n",
       "14    40000.000000\n",
       "15    26000.000000\n",
       "16    28750.000000\n",
       "17    40000.000000\n",
       "18    25750.000000\n",
       "19    45000.000000\n",
       "21    21500.000000\n",
       "23    60000.000000\n",
       "Name: salary, dtype: float64"
      ]
     },
     "execution_count": 272,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12 - 分组规则｜通过字典\n",
    "\n",
    "将 score 和 matchScore 的和记为总分，与 salary 列同时进行分组，并查看结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>总分</th>\n",
       "      <th>薪资</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>248.101875</td>\n",
       "      <td>37500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>208.559414</td>\n",
       "      <td>15000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>94.972357</td>\n",
       "      <td>3500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>80.874153</td>\n",
       "      <td>45000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>78.755375</td>\n",
       "      <td>30000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>0.314259</td>\n",
       "      <td>25000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>0.283276</td>\n",
       "      <td>35000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>0.256719</td>\n",
       "      <td>30000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>0.281062</td>\n",
       "      <td>20000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104</th>\n",
       "      <td>0.159343</td>\n",
       "      <td>21500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>105 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             总分     薪资\n",
       "0    248.101875  37500\n",
       "1    208.559414  15000\n",
       "2     94.972357   3500\n",
       "3     80.874153  45000\n",
       "4     78.755375  30000\n",
       "..          ...    ...\n",
       "100    0.314259  25000\n",
       "101    0.283276  35000\n",
       "102    0.256719  30000\n",
       "103    0.281062  20000\n",
       "104    0.159343  21500\n",
       "\n",
       "[105 rows x 2 columns]"
      ]
     },
     "execution_count": 260,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 13 - 分组规则｜通过多列\n",
    "\n",
    "计算不同 工作年限（`workYear`）和 学历（`education`）之间的薪资均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>workYear</th>\n",
       "      <th>education</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">1-3年</th>\n",
       "      <th>不限</th>\n",
       "      <td>36250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本科</th>\n",
       "      <td>31000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>硕士</th>\n",
       "      <td>36875.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">3-5年</th>\n",
       "      <th>不限</th>\n",
       "      <td>30312.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>大专</th>\n",
       "      <td>28125.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本科</th>\n",
       "      <td>31828.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5-10年</th>\n",
       "      <th>不限</th>\n",
       "      <td>26250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本科</th>\n",
       "      <td>28423.076923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">不限</th>\n",
       "      <th>不限</th>\n",
       "      <td>35000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本科</th>\n",
       "      <td>35625.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">应届毕业生</th>\n",
       "      <th>不限</th>\n",
       "      <td>32500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本科</th>\n",
       "      <td>33833.333333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          salary\n",
       "workYear education              \n",
       "1-3年     不限         36250.000000\n",
       "         本科         31000.000000\n",
       "         硕士         36875.000000\n",
       "3-5年     不限         30312.500000\n",
       "         大专         28125.000000\n",
       "         本科         31828.125000\n",
       "5-10年    不限         26250.000000\n",
       "         本科         28423.076923\n",
       "不限       不限         35000.000000\n",
       "         本科         35625.000000\n",
       "应届毕业生    不限         32500.000000\n",
       "         本科         33833.333333"
      ]
     },
     "execution_count": 259,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 14 - 分组转换｜ transform\n",
    "\n",
    "在原数据框 df 新增一列，数值为该区的平均薪资水平"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 359,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 15 - 分组过滤｜filter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "提取平均工资小于 30000 的行政区的全部数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 16 - 分组可视化\n",
    "\n",
    "<br>\n",
    "\n",
    "对杭州市各区公司数量进行分组，并使用柱状图进行可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 297,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 400,
       "width": 607
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 聚合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 17 - 聚合统计\n",
    "\n",
    "分组计算不同行政区，薪水的最小值、最大值和平均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 326,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>district</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>22500</td>\n",
       "      <td>30000</td>\n",
       "      <td>26250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>30000</td>\n",
       "      <td>30000</td>\n",
       "      <td>30000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>7500</td>\n",
       "      <td>60000</td>\n",
       "      <td>33583.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>24000</td>\n",
       "      <td>30000</td>\n",
       "      <td>28500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>3500</td>\n",
       "      <td>45000</td>\n",
       "      <td>25250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>7500</td>\n",
       "      <td>50000</td>\n",
       "      <td>31428.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>25000</td>\n",
       "      <td>45000</td>\n",
       "      <td>36250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>6500</td>\n",
       "      <td>45000</td>\n",
       "      <td>30893.939394</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            min    max          mean\n",
       "district                            \n",
       "上城区       22500  30000  26250.000000\n",
       "下沙        30000  30000  30000.000000\n",
       "余杭区        7500  60000  33583.333333\n",
       "拱墅区       24000  30000  28500.000000\n",
       "江干区        3500  45000  25250.000000\n",
       "滨江区        7500  50000  31428.571429\n",
       "萧山区       25000  45000  36250.000000\n",
       "西湖区        6500  45000  30893.939394"
      ]
     },
     "execution_count": 326,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 18 - 聚合统计｜修改列名\n",
    "\n",
    "将上一题的列名（包括索引名）修改为中文"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 327,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>最低工资</th>\n",
       "      <th>最高工资</th>\n",
       "      <th>平均工资</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>行政区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>22500</td>\n",
       "      <td>30000</td>\n",
       "      <td>26250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>30000</td>\n",
       "      <td>30000</td>\n",
       "      <td>30000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>7500</td>\n",
       "      <td>60000</td>\n",
       "      <td>33583.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>24000</td>\n",
       "      <td>30000</td>\n",
       "      <td>28500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>3500</td>\n",
       "      <td>45000</td>\n",
       "      <td>25250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>7500</td>\n",
       "      <td>50000</td>\n",
       "      <td>31428.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>25000</td>\n",
       "      <td>45000</td>\n",
       "      <td>36250.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>6500</td>\n",
       "      <td>45000</td>\n",
       "      <td>30893.939394</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      最低工资   最高工资          平均工资\n",
       "行政区                            \n",
       "上城区  22500  30000  26250.000000\n",
       "下沙   30000  30000  30000.000000\n",
       "余杭区   7500  60000  33583.333333\n",
       "拱墅区  24000  30000  28500.000000\n",
       "江干区   3500  45000  25250.000000\n",
       "滨江区   7500  50000  31428.571429\n",
       "萧山区  25000  45000  36250.000000\n",
       "西湖区   6500  45000  30893.939394"
      ]
     },
     "execution_count": 327,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 19 - 聚合统计｜组合\n",
    "\n",
    "对不同岗位(`positionName`)进行分组，并统计其薪水(`salary`)中位数和得分(`score`)均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 20 -聚合统计｜多层\n",
    "\n",
    "对不同行政区进行分组，并统计薪水的均值、中位数、方差，以及得分的均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 302,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">salary</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>district</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>26250.000000</td>\n",
       "      <td>26250</td>\n",
       "      <td>5303.300859</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>30000.000000</td>\n",
       "      <td>30000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>33583.333333</td>\n",
       "      <td>30000</td>\n",
       "      <td>10857.847721</td>\n",
       "      <td>15.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>28500.000000</td>\n",
       "      <td>30000</td>\n",
       "      <td>3000.000000</td>\n",
       "      <td>2.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>25250.000000</td>\n",
       "      <td>26250</td>\n",
       "      <td>17255.433927</td>\n",
       "      <td>39.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>31428.571429</td>\n",
       "      <td>30000</td>\n",
       "      <td>10445.436461</td>\n",
       "      <td>12.952381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>36250.000000</td>\n",
       "      <td>37500</td>\n",
       "      <td>10307.764064</td>\n",
       "      <td>18.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>30893.939394</td>\n",
       "      <td>30000</td>\n",
       "      <td>7962.566302</td>\n",
       "      <td>8.060606</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                salary                           score\n",
       "                  mean median           std       mean\n",
       "district                                              \n",
       "上城区       26250.000000  26250   5303.300859   2.000000\n",
       "下沙        30000.000000  30000           NaN   6.000000\n",
       "余杭区       33583.333333  30000  10857.847721  15.166667\n",
       "拱墅区       28500.000000  30000   3000.000000   2.750000\n",
       "江干区       25250.000000  26250  17255.433927  39.250000\n",
       "滨江区       31428.571429  30000  10445.436461  12.952381\n",
       "萧山区       36250.000000  37500  10307.764064  18.250000\n",
       "西湖区       30893.939394  30000   7962.566302   8.060606"
      ]
     },
     "execution_count": 302,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 21 - 聚合统计｜自定义函数\n",
    "\n",
    "在 18 题基础上，在聚合计算时新增一列计算最大值与平均值的差值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 345,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>最低工资</th>\n",
       "      <th>最高工资</th>\n",
       "      <th>平均工资</th>\n",
       "      <th>最大值与均值差值</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>行政区</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上城区</th>\n",
       "      <td>22500</td>\n",
       "      <td>30000</td>\n",
       "      <td>26250.000000</td>\n",
       "      <td>3750.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下沙</th>\n",
       "      <td>30000</td>\n",
       "      <td>30000</td>\n",
       "      <td>30000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>余杭区</th>\n",
       "      <td>7500</td>\n",
       "      <td>60000</td>\n",
       "      <td>33583.333333</td>\n",
       "      <td>26416.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>拱墅区</th>\n",
       "      <td>24000</td>\n",
       "      <td>30000</td>\n",
       "      <td>28500.000000</td>\n",
       "      <td>1500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>江干区</th>\n",
       "      <td>3500</td>\n",
       "      <td>45000</td>\n",
       "      <td>25250.000000</td>\n",
       "      <td>19750.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>滨江区</th>\n",
       "      <td>7500</td>\n",
       "      <td>50000</td>\n",
       "      <td>31428.571429</td>\n",
       "      <td>18571.428571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>萧山区</th>\n",
       "      <td>25000</td>\n",
       "      <td>45000</td>\n",
       "      <td>36250.000000</td>\n",
       "      <td>8750.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>西湖区</th>\n",
       "      <td>6500</td>\n",
       "      <td>45000</td>\n",
       "      <td>30893.939394</td>\n",
       "      <td>14106.060606</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      最低工资   最高工资          平均工资      最大值与均值差值\n",
       "行政区                                          \n",
       "上城区  22500  30000  26250.000000   3750.000000\n",
       "下沙   30000  30000  30000.000000      0.000000\n",
       "余杭区   7500  60000  33583.333333  26416.666667\n",
       "拱墅区  24000  30000  28500.000000   1500.000000\n",
       "江干区   3500  45000  25250.000000  19750.000000\n",
       "滨江区   7500  50000  31428.571429  18571.428571\n",
       "萧山区  25000  45000  36250.000000   8750.000000\n",
       "西湖区   6500  45000  30893.939394  14106.060606"
      ]
     },
     "execution_count": 345,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](http://liuzaoqi.oss-cn-beijing.aliyuncs.com/2021/09/16/16317972442543.jpg?域名/sample.jpg?x-oss-process=style/stylename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "384px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
